package multiplex.facade;

import java.util.ArrayList; 
import java.util.List;

import multiplex.dataaccess.dao.LocalizacaoDao;
import multiplex.dataaccess.dao.SalaDao;
import multiplex.dataaccess.dao.SessaoDao;
import multiplex.model.Filme;
import multiplex.model.Localizacao;
import multiplex.model.Sala;

public class LocalizacaoFacade {
	private LocalizacaoDao localizacaoDAO;
	
	public LocalizacaoFacade(){
		localizacaoDAO = new LocalizacaoDao();
	}

	public boolean cadLocalizacao(Localizacao localizacao){
		try{
			localizacaoDAO.save(localizacao);
			return true;
		}catch(Throwable e){
			return false;
		}
	}
	
	public void alteraLocalizacao(Localizacao localizacao){
		localizacaoDAO.update(localizacao);
	}
	
	public void removeLocalizacao(Localizacao localizacao){
		localizacaoDAO.remove(localizacao);
	}

	public List<Localizacao> getAllLocalizacao(){
		return localizacaoDAO.getAll();
	}
	
	public List<Localizacao> getLocalizacao(String nome){
		List<Localizacao> result = new ArrayList<Localizacao>();
		List<Localizacao> localizacoes = localizacaoDAO.getAll();
		for (Localizacao localizacao : localizacoes) {
			if(localizacao.getNome().contains(nome))
				result.add(localizacao);
		}
		return localizacaoDAO.getAll();
	}

	public List<Localizacao> getLocalizacaoFilme(Filme oFilme){
		SessaoDao sessaoDAO = new SessaoDao();
		SalaDao salaDAO = new SalaDao();
		LocalizacaoDao localizacaoDAO = new LocalizacaoDao(); 
		List<Localizacao> localizacoes = localizacaoDAO.getAll();
		List<Sala> salas;
		List<Localizacao> result = new ArrayList<Localizacao>();
		
		
		for (Localizacao localizacao : localizacoes) {
			salas=salaDAO.getAllFromLocalizacao(localizacao);
			for (Sala sala : salas) {
				if(sessaoDAO.getAllFromSalaAndFilme(sala,oFilme)!=null){
					result.add(localizacao);
					break;
				}
			}
		}
		return result;
	}
	
	public List<String> getCidadeByFilme(Filme oFilme){
    	List<String> result = new ArrayList<String>();
    	List<Localizacao> localizacoes = localizacaoDAO.getAllFromFilme(oFilme);
    	for (Localizacao localizacao : localizacoes) {
			if(!result.contains(localizacao.getCidade())){
				result.add(localizacao.getCidade());
			}
		}    	
    	return result;
    }
}
